package pe.com.hermes.hermetic.modelo.dao;

import pe.com.hermes.hermetic.beans.CambioSucursalBean;
import pe.com.hermes.hermetic.beans.ClaveBean;
import pe.com.hermes.hermetic.beans.ConsolidadoBean;
import pe.com.hermes.hermetic.beans.ControlNumeroBean;
import pe.com.hermes.hermetic.beans.DetalleDenominacionPedidoBean;
import pe.com.hermes.hermetic.beans.DetallePedidoBean;
import pe.com.hermes.hermetic.beans.PedidoTemporalBean;
import pe.com.hermes.hermetic.beans.PedidosBean;
import pe.com.hermes.hermetic.beans.TransaccionPedidoBean;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;

import java.util.Map;

import pe.com.hermes.hermetic.beans.ArchPedidosAgrupadosBean;
import pe.com.hermes.hermetic.beans.CuentaBean;
import pe.com.hermes.hermetic.beans.DenominacionPedidoBean;
import pe.com.hermes.hermetic.beans.PedidoCargaBean;
import pe.com.hermes.hermetic.beans.RepoAbastDetaBean;
import pe.com.hermes.hermetic.beans.RptaBaseBean;
import pe.com.hermes.hermetic.beans.TiposBean;
import pe.com.hermes.hermetic.negocio.managerimpl.pedido.tv.PedidoTvManagerImpl;
import pe.com.hermes.unidadesnegocio.general.response.common.CampoResponse;
import pe.com.hermes.pedidotxclient.modelo.bean.PedidoBean;
import pe.com.hermes.pedidotxclient.modelo.bean.PedidoDenoBean;
import pe.com.hermes.pedidotxclient.modelo.bean.PedidoDetaBean;
import pe.com.hermes.unidadesnegocio.operaciones.entities.CompServMantEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoDenoEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoDetaEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoLogEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.managerimpl.PedidoAbstract;


public interface PedidoDAO {

    public PedidosBean getPedido(String codSucursal, String codCliente, 
                                 String serie, String numero);

    public List getDetallePedido(String cliente, String sucursal, 
                                 String cuenta, String pedido, String serie);

    public List getBilletesMonedas(String pedido, String serie, String detalle, 
                                   String tipoMon, String tipoUnidad);

    public String getTotalDenominacion(String pedido, String serie, 
                                       String detalle, String tipoMon);

    public List getSolicitudPedidos(String fechaDesde, String fechaHasta, 
                                    String codCliente, String tipoPedido, 
                                    String codigoSucursal, String tipoDestino,
                                    String listMatrices);

    public List getListadoEliminaPedidos(String fechaSolicitud, 
                                         String codigoSucursal, 
                                         String codigoBoveda, 
                                         String codigoCliente);

    public List getListadoPedidoTemporal(String codigoCliente, 
                                         String codigoSucursal);

    public List getListadoPedidoTemporal(String codigoCliente, 
                                         String codigoSucursal, 
                                         String usuario);

    public List getListadoPedidoTemporal(String codigoCliente, 
                                         String codigoSucursal, String usuario, 
                                         String transaccion);
    //   public List getListadoDenominacion(String unidadMonetaria);

    public void insertarPedido(PedidosBean pedido) throws Exception;

    public void insertarDetallePedido(DetallePedidoBean detalle) throws Exception;

    public void insertarDenominacionPedido(DetalleDenominacionPedidoBean detalle) throws Exception;

    public void insertarPedidoTemporal(PedidoTemporalBean ptemporal);

    public void insertarTransaccionPedido(TransaccionPedidoBean transaccion) throws Exception;

    public void eliminaPedidoTemporal(PedidoTemporalBean ptemporal);

    public void actualizaControlNumero(ControlNumeroBean dnumero);

    public void ingresaControlNumero(ControlNumeroBean dnumero);

    public String getFechaHoy();

    public ResultSet getDenominacionMoneda(String tip_unid_mone);

    public String getDatosPunto(String cliente, String punto, String valor);

    public String getDatoTipoBillete(String cod_tipo);

    public String getNumeroDocumentoUlti(String codSerie);

    public int verifica_clave_car_aut(String cliente, String clave);

    public List getListadoDenominacion(String unidadMonetaria, 
                                       String fechaDesde, String cliente, 
                                       String cuenta, String sucursal, 
                                       String tipoBillete);

    public int getNumeroPedido();

    public int getNumeroPedido(String tipoDocumento, String codSerie);

    public int getIndProgPedido(String cliente, String fechaEntrega, 
                                String horaEntrega);

    public List getListadoClaves(String cliente);

    public int getCantidadClaves(String fecha, String cliente);

    public void insertarClave(ClaveBean clave);

    public void eliminaClave(ClaveBean clave);

    public ResultSet getFechaClave(String fec_ini, String fec_fin, 
                                   String sucursal);

    public int getExisteClave(String fechaCale, String cliente);

    public void actualizaClave(ClaveBean clave);


    public String getFechaSolicitudPedido(String codSucursal, 
                                          String codCliente);

    public DetallePedidoBean getDetallePedidoSecuencia(String sucursal, 
                                                       String cliente, 
                                                       String cuenta, 
                                                       String tipo, 
                                                       String serie, 
                                                       String numero, 
                                                       String secuencia);

    public int getCantidadPedidos(String tipo, String serie, String numero);


    public void eliminarPedido(DetallePedidoBean dpedido);

    public CampoResponse validarFechaAtencion(String fecha, String hora);

    public void actualizaConsistencia(String usuario, String cliente);

    public String obtieneClaveDia(String cliente);

    public String desencriptaClaveDia(String cliente);

    public List getDenominacion(String tip_unid_mone);

    public void insertarCambioSucural(final CambioSucursalBean cambioSucursalBean) throws Exception;

    public String validaOSBool(PedidoTemporalBean pedidoTemp);

    public String getCodClieFactOS(PedidoTemporalBean pedidoTemp);

    public String validaOSMens(PedidoTemporalBean pedidoTemp);

    public String getDescPuntoXEquiCliente(final String codClienteBanco, 
                                           final String codEquiCliente, 
                                           final String codEquiAgen);

    public String getCodClientePedi(final String codClienteBanco, 
                                    final String codEquiCliente);

                                    public ConsolidadoBean getSaldoConsolidado(final String cod_sucu_htb,final String fecha);

    public CampoResponse validaFechaContable(final String fechaContable, final String cod_clie, final String cod_sucu_htb, final String cod_cnta) ;

    public List getSucursalesByBoveda(String cod_clie, String cod_cnta, String tip_unid_mone);
    
    public boolean getValPedido(final String codSucursal, final String codPunto, 
                                                              final String tipomoneda,  final String fechaAtenc, 
                                                              final String montopedi, final String tipPedi);
    public List getListPedidoByFecHorClieAndSucu(String codCliente,String codSucursal,String fecSoliPedi,String horSoliPedi);
    
    public String getCodDiarioEncriptByClie(String codClie);
    public String getCodDiarioByClieDesencriptado(String codDiarioEncr);
    //metodos migrados por la WebService
    public int getBovedaDePedido(int codClie,int codSucuHtb,int codCntaOrig,int tipUnidMone,int tipMone);
    public int inseCambSucu(PedidoBean pedidoBean);
    public int inseCambSucu(int numPedi,String codSeriPedi,String tipDocu,int codSucuHtbPropuesto,int codSucuPedi,String usuWeb);
    public int getNumPedi(PedidoBean pedidoBean);
    public int getNumPedi(String tipDocu,String codSeriPedi);    
    public int inseTgCtrlNume(PedidoBean pedidoBean);
    public int inseTgCtrlNume(String tipDocu,String codSeriPedi,int  numPedi);
    public int getIndProg(int codClie,String fecAtenPedi,String horInicAtePact);
    public int getCodClieFact(PedidoBean pedidoBean);
    public int getCodClieFact(int codPunt,int codClieOrig,int codClieGrup,int codSucuHtb,int codCntaOrig);
    
    /*JRA REQ1614 HW-ATM Validaciones**/
    public String getCodCajeroFromCodBanco(String codSucu,String codClie,String codAtmBanco);
    public CampoResponse validaCodAtmBanco(String codSucu,String codClie,String codAtmBanco);
    public CampoResponse validaFecProc(String codSucu,String codClie,String codCnta,String codCajero,String fecProc);    
    public CampoResponse validaFecAten(String codSucu,String codClie,String codCajero,String fecAten);
    public Map validaHoraAten(String codSucu,String codClie,String codCajero,String fecAten,String horaAten);    
    public PedidoCargaBean retuTipoMoneCodDeno(String codClie,String codCajero,String codDisp);
    public CampoResponse validaHoraAtenParam(String codSucu,String codClie,String codCajero,String fecAten,String horaAten,String codPrio,Integer tipPrio);
    public CampoResponse validaDenomPediATM(Double denom);
    public CampoResponse validaCodDispen(String codSucu,String codClie,String codCajero,String codDispen,
                                        String tip_unid_mone,Double codDeno,String horaAten);    
    public CampoResponse validaMontoDispen(String codSucu,String codClie,String codCnta,String codCajero,String codDispen,
                                        String tip_unid_mone,Double codDeno,String fecProc,Double monto); 
    public CampoResponse validaMontoTotalATM(String codSucu,String codClie,String codCnta,
                                      String tip_unid_mone,String fecProc,Double monto);  
    public CampoResponse validaPorcPrioATM(String codSucu,String codClie,String codCnta,Integer indPrio,Integer cantPrio,Integer cantTotl,String fecProc);
    /*FIN JRA REQ1614**/
    public List<CuentaBean> getCntaAtm(String codCliente,String codSucursal);
    public List<PedidoDenoEntity> getListDenoYSaldAtm(int codClie,int codSucuHtb, int codCnta,String fecProcAper,int codCjro,int tipBill);
    public int getIndProgAtm(int codPunt,String fecAtenPedi,String horInicAtePact,String horFinAtenPact);
    public int insePedi(PedidoEntity pedido);
    public int insePediDeta(PedidoDetaEntity pedidoDeta);
    public int insePediDeno(PedidoDenoEntity pedidoDeno);
    public int insePediDenoDeta(PedidoDenoEntity pedidoDeno);
    public int insePediTemp(PedidoEntity pedido);
    public int insePediDetaTemp(PedidoDetaEntity pedidoDeta);
    public int insePediDenoTemp(PedidoDenoEntity pedidoDeno);
    public int insePediDenoDetaTemp(PedidoDenoEntity pedidoDeno);
    public int getIndConfAtmAuto(int codClie,int codPunt);
    public boolean isCuentaAtm(int codClie,int codSucuHtb,int codCnta);
    public List<PedidoAbstract> getListPredic(int codClie,int codSucuHtb, String fecPedi);
    public List getDetalleVisuPedido(String numPedi,int codClie,String codSucu, String fecPedi,String codSeri,int estDocu, String tipDocuPedi) throws SQLException;
    public List<PedidoAbstract> getPedidosAtm (int cliente, String sucursales, int tipFecha ,String fechaDesde, String fechaHasta, String puntos, String tipRegiPedidos, int nroPedido, String estado,int nivelAuto, int tipPedi, int indRecp) throws SQLException;
    public List<PedidoAbstract> getPedidosAtmTemp (int cliente, String sucursales, int tipFecha ,String fechaDesde,String fechaHasta, String puntos, String tipRegiPedidos, int nroPedido, String estado,int nivelAuto, int tipPedi) throws SQLException;
    public List<PedidoAbstract> getPedidosAtmToPred(int cliente, String tipPedidos, String tipFecha, String fechaDesde,String fechaHasta, String sucursales) throws Exception;
    public PedidoAbstract getRetuPediAtmInter(String tipDocuPedi,String codSeriPedi,int numPedi);
    public int inseArchPediClie(int codClie, String fecCarg,String rutOrig,String rutDestServ,String rutDestWLSR,String nomArch,String estArch,int numHojas,String nomComp, String codUsua);
    public List<ArchPedidosAgrupadosBean> consArchPediClie(int codClie, String fecInic,String fecFinl,int estArch);
    public int updtArchPediClie(int codArchPedi,int estArch,String nomComp,String codUsua);
    public List<PedidoDetaEntity> getListAtencionRemesas(String  sucursales, int cliente,String fechaDesde, String fechaHasta) throws Exception;    
    public List<RepoAbastDetaBean> getDetaRemeAbastATM(String numCmpb,String codSeriCmpb,String tipDocuCmpb,String numCmpbRemaSol,String
                                                     codSeriRemaSol,String tipDocuRemaSol,String numCmpbRemaDol,String codSeriRemaDol,
                                                     String tipDocuRemaDol,String origDocu,String orig);
    public List<RepoAbastDetaBean> getDetaRechAbastATM(String numCmpb,String codSeriCmpb,String tipDocuCmpb,String numCmpbRemaSol,String
                                                   codSeriRemaSol,String tipDocuRemaSol,String numCmpbRemaDol,String codSeriRemaDol,
                                                   String tipDocuRemaDol,String origDocu,String orig);
    public Map getFaltSobrAbastATM(String numCmpb,String codSeriCmpb,String tipDocuCmpb,String numCmpbRemaSol,String
                                   codSeriRemaSol,String tipDocuRemaSol,String numCmpbRemaDol,String codSeriRemaDol,
                                   String tipDocuRemaDol,String origDocu,String orig,int codSucuHtb,double monRemeSole,double monRemeDola);
    public List getListAbastecimientoAtm(String codClie, String codSucu,String fechaDesde,String fechaHasta);
    public PedidoAbstract getRetuPedi(String tipDocuPedi,String codSeriPedi,int numPedi);
    public List<CompServMantEntity> getListCabeAbastATMMap(String fecInic,String fecFinl,int codClie,int codSucuHtb);
    public Double getPorcRemaAbastATM(String numCmpb,String codSeriCmpb,String tipDocuCmpb,int codSucuHtb,int tipUnidMone,String subTipoServ);
    public List<RepoAbastDetaBean> getDetaAbastATM(String numPedi,String codSeriPedi,String tipDocuPedi,String codServ,int codSucuHtb);
    public void inseLogAutoPedi(PedidoLogEntity pedidoLog)  throws SQLException;    
    public TiposBean obtiHoraAten(String codSucu,String codClie,String codCajero,String fecAten,String horaAten);
    public List getPedidosAtmByNumero(int tipPedi,int nroPedi, String codEstado);
    public CampoResponse validaCodAtmPunto(String codAtmPunto);
    public List<PedidoAbstract> getListPediTempTvBovProp(String listCodClie, String codSucuHtb, String tipRegiPedidos, int tipProc, int tipFecha ,String fechaDesde,String fechaHasta, String estado,int nivelAuto);
    public List<PedidoAbstract> getListPediTempTvBovBanc(String listCodClie, String listCodBanc, String codSucuHtb, String tipRegiPedidos, int tipProc, int tipFecha ,String fechaDesde,String fechaHasta, String estado,int nivelAuto, int numCateNive);
    public List<PedidoAbstract> getListPediTvBovProp (String listCodClie, String codSucuHtb, String tipRegiPedidos, int tipProc, int tipFecha ,String fechaDesde,String fechaHasta, String estado,int nivelAuto);
    public int aprovePediTemp(PedidoEntity pedido);
    public int actuPendEstdPediTemp(PedidoEntity pedido);
    public PedidoAbstract getRetuPediTvTemp(String tipDocuPedi,String codSeriPedi,int numPedi);
    public int actuCateNivePediTemp(PedidoEntity pedido, int numCateNiveAuto, int numNiveAuto) ;
    public int rechazarPediTemp(PedidoEntity pedido);
    public int elimPediTemp(PedidoEntity pedido);
    public int modiPediTemp(PedidoEntity pedido);
    public int modiPediDetaTemp(PedidoDetaEntity pedidoDeta);
    public int modiPediDenoTemp(PedidoDenoEntity pedidoDeno);
    public int modiPediDenoDetaTemp(PedidoDenoEntity pedidoDeno);
    public int elimTodoPediDetaTemp(PedidoEntity pedido);
    public int elimTodoPediDenoTemp(PedidoEntity pedido);
    public int modiDatoPediTemp(PedidoEntity pedido);
    public List<String> getListMailNive(int codClieOrig, int codClieDest, int tipProc,int niveAuto);
    public List getListDenosByUnidMone(String tipUnidMone);
  public List getListPedidos(String listCodCliente, String listCodSucusal,
                             String listCodPunto, String listCodBanco, String codOrigen,
                             String tipPed, String tipoRegPedi,
                             String estado, String tipoFecha,
                             String fechaInicio, String fechaFin,
                             String numPedi);

    public List<PedidoTvManagerImpl> getListDetaPedido(String numPedi,String codSeriPedi, String tipDocuPedi);


    public List<String> getListMailPediSucu(String codRazoSoci);

    public List getEstaLogNivPedi(String TipoDocu, String numPedi,
                                  String codSeriPedi);
}
